package routes

import (
	"ginblog/config"
	"ginblog/controller"
	"ginblog/middleware"
	"github.com/gin-gonic/gin"
)

func InitRouter() (r *gin.Engine) {
	// 设置项目启动方式
	gin.SetMode(config.AppMode)

	// 创建一个服务
	//r = gin.Default()
	r = gin.New()

	// 配置跨域请求中间件
	r.Use(middleware.Cors())

	// 导入自定义日志中间件
	r.Use(middleware.Logger())

	// 导入Recovery中间件：Recovery返回一个中间件，
	// 该中间件从任何恐慌中恢复，并写入500（如果有）。
	// 当你的程序出现一些你未考虑到的异常时，程序就会退出，
	// 服务就停止了，所以这个中间件是有必要的

	/*注意：当使用gin.Default()的时候，会默认启用gin.Recocery()
	  这个中间件。而使用gin.New()则需要自己添加
	  这里顺带提一下gin.Default()和gin.New()
	*/
	r.Use(gin.Recovery())

	// 实例化结构体
	// 用户
	user := controller.UserController{}

	// 分类
	cate := controller.CategoryController{}

	// 文章
	article := controller.ArticleController{}

	// 登录
	login := controller.LoginController{}

	// 上传
	upload := controller.UploadController{}

	// 评论
	comment := controller.CommentController{}

	// 个人信息
	profile := controller.ProfileController{}

	auth := r.Group("/api")

	// 使用Token中间件
	auth.Use(middleware.JwtToken())

	// 配置路由组
	// 用户模块的路由接口
	userRouterJwt := auth.Group("/user")
	{
		// 编辑用户
		userRouterJwt.PUT("/:id", user.EditUser)

		//修改密码
		userRouterJwt.PUT("/admin/changepw/:id", user.ChangeUserPassword)

		// 模糊搜索用户
		userRouterJwt.GET("/admin/users", user.GetUsers)

		// 删除用户
		userRouterJwt.DELETE("/:id", user.DeleteUser)

	}

	// 分类模块的路由接口
	CateRouterJwt := auth.Group("/cate")
	{

		// 添加分类
		CateRouterJwt.POST("/add", cate.AddCategory)

		// 编辑分类
		CateRouterJwt.PUT("/:id", cate.EditCategory)

		// 删除分类
		CateRouterJwt.DELETE("/:id", cate.DeleteCategory)

	}

	// 个人信息模块
	ProfileRouterJwt := auth.Group("/profile")
	{
		ProfileRouterJwt.GET("/name", profile.ProfileOne)
	}

	// 文章模块的路由接口
	ArticleRouterJwt := auth.Group("/article")
	{

		// 添加文章
		ArticleRouterJwt.POST("/add/:username", article.AddArticle)

		// 编辑文章
		ArticleRouterJwt.PUT("/:id", article.EditArticle)

		// 删除文章
		ArticleRouterJwt.DELETE("/:id", article.DeleteArticle)

	}
	// 评论的路由接口
	CommentRouter := auth.Group("/comment")
	{
		// 查询评论列表
		CommentRouter.GET("/list", comment.GetCommentList)
		// 发表评论
		CommentRouter.POST("/add", comment.AddComment)
		// 删除评论
		CommentRouter.DELETE("/delcomment/:id", comment.DeleteComment)
		// 通过审核
		CommentRouter.PUT("/checkcomment/:id", comment.CheckComment)
		// 撤销评论
		CommentRouter.PUT("/uncheckcomment/:id", comment.UncheckComment)
		// 查询单个评论
		CommentRouter.GET("/info/:id", comment.GetComment)

		// 获取指定文章的评论信息
		CommentRouter.GET("/front/:id", comment.CommentFront)
	}

	// 文件上传的路由接口
	UploadRouter := auth.Group("/upload")
	{
		// 上传图片到七牛云
		UploadRouter.POST("/qiniu", upload.UpLoad)
	}

	// 不需要进行权限验证的请求
	userRouter := r.Group("/api/user")
	{
		// 添加用户
		userRouter.POST("/add", user.AddUser)

		// 查询用户列表
		userRouter.GET("/list", user.GetUsers)

		// 用户登录
		userRouter.POST("/login", login.Login)
	}

	CateRouter := r.Group("/api/cate")
	{
		// 查询单个分类
		CateRouter.GET("/onecate/:id", cate.GetCategoryById)

		// 查询分类列表
		CateRouter.GET("/list", cate.GetCategorys)
	}
	ArticleRouter := r.Group("/api/article")
	{
		// 查询某一篇文章
		CateRouter.GET("/:id", article.GetArticleById)

		// 查询文章列表
		ArticleRouter.GET("/list", article.GetArticles)

		//查询指定文章
		ArticleRouter.GET("/info/:id", article.GetArticleById)

		// 根据分类查询文章
		ArticleRouter.GET("/cate/:id", article.GetCateArt)

		// 模糊搜索文章
		ArticleRouter.GET("/admin/articles", article.GetArticles)
	}

	return r
}
